TMetaFileCanvas a DPI

Otázka od: Barica Miroslav

7. 9. 2004 13:48

Zdravim vospolok,
Mam takyto maly problemik, do metafajlu zapisujem (vykreslujem) nejaku
grafiku + text. Pokial je rozlisenie nastavene na 96 DPI, text je v
poriadku. Pokial vsak uzivatel ma nastavene ine rozlisenie, napr. 120
DPI, font sa zvacsi a nastava chaos. Ako sa da docielit toho aby velkost
fontu ostala zachovana, t.j. aby sa nezvacsoval a text sa neprepisoval
cez seba?
Vdaka za pripadne nakopnutie
M.



Odpovedá: Martin Schayna

14. 9. 2004 11:19

Barica Miroslav wrote:
> Zdravim vospolok,
> Mam takyto maly problemik, do metafajlu zapisujem (vykreslujem) nejaku
> grafiku + text. Pokial je rozlisenie nastavene na 96 DPI, text je v
> poriadku. Pokial vsak uzivatel ma nastavene ine rozlisenie, napr. 120
> DPI, font sa zvacsi a nastava chaos. Ako sa da docielit toho aby
> velkost fontu ostala zachovana, t.j. aby sa nezvacsoval a text sa
> neprepisoval cez seba?

Mel jsem podobny problem, QR dela preview take pomoci metafilu
a na pocitacich s WindowsXP a nestandardnim desktopem (16:9)
byly fonty podivne "protazene". Je to zpusobene tim, ze se na metafile
zapisuje s pomoci TMetafileCanvas, ktery se vyrabi pouze s pomoci
nejakeho urciteho devicu, defaultne se vyuziva DC desktopu.
Nevim proc, ale na XP to byl problem i kdyz na 2000 to fungovalo.
Me tenkrat stacilo vyrabet metafile canvas s vychozi tiskarnou, toto
je uryvek z upraveneho QrPrntr.pas:

  FMetafile := TMetafile.Create;
  FMetafile.Width := XSize(PaperWidthValue);
  FMetafile.Height := YSize(PaperLengthValue);

  // Pokud se toto volalo na WinXP s nastavenym rozlisenim desktopu 16:9,
  // vygeneroval se metafile chybne
  //FCanvas := TMetafileCanvas.Create(FMetafile, 0);
  FCanvas := TMetafileCanvas.Create(FMetafile, fPrinter.Handle);

Martin Schayna